package com.zrrd.config;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

/**
 * @author WanJl
 * @version 1.0
 * @title ServletContainersInitConfig
 * @description Web容器配置类(也叫SpringMVC容器配置类、也叫Servlet容器配置类)
 * 配置它，是因为要设置SpringMVC的请求拦截路径，配置有哪些请求是要经过SpringMVC进行处理的
 * @create 2024/1/27 15:10
 */
/*
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    */
/**
     * 创建Servlet的时候，设置程序上下文配置的方法。
     * 其实就是在创建Web容器对象的时候，要加载SpringMVC核心配置类SpringMvcConfig.class。
     * @return
     *//*

    @Override
    protected WebApplicationContext createServletApplicationContext() {
        //初始化WebApplicationContext对象，其实是创建实现类AnnotationConfigWebApplicationContext的对象
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        //将SpringMVC配置类SpringMvcConfig注册到Web容器
        context.register(SpringMvcConfig.class);
        return context;
    }

    */
/**
     * 其实就是获取能够交给SpringMVC处理的请求路径
     * @return
     *//*

    @Override
    protected String[] getServletMappings() {
        //告诉SpringMVC,所有的请求：  /  都要拦截
        return new String[]{"/"};
    }

    */
/**
     * 加载Spring核心配置类，
     * 我们暂时设置为null，因为我们已经为Spring核心配置类添加@Configuration注解，将其设置为spring启动就要先加载类
     * @return
     *//*

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}
*/

    //上面的是最初的复杂版的，下面的是简化版的

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
